package com.nanhai.buddhist.college.module.study.service.timetable;

import java.util.*;
import javax.validation.*;

import com.alibaba.nacos.common.utils.StringUtils;
import com.nanhai.buddhist.college.framework.common.pojo.CommonResult;
import com.nanhai.buddhist.college.module.collegebase.api.collegeclass.dto.ClassesRespDTO;
import com.nanhai.buddhist.college.module.collegebase.api.room.dto.RoomRespDTO;
import com.nanhai.buddhist.college.module.collegebase.api.teacher.dto.TeacherRespDTO;
import com.nanhai.buddhist.college.module.study.controller.admin.timetable.vo.*;
import com.nanhai.buddhist.college.module.study.controller.teacher.vo.StudentClockListReqVO;
import com.nanhai.buddhist.college.module.study.controller.teacher.vo.SubjectStudentClockResVO;
import com.nanhai.buddhist.college.module.study.convert.timetable.ClassTimetableConvert;
import com.nanhai.buddhist.college.module.study.dal.dataobject.studysubject.StudySubjectDO;
import com.nanhai.buddhist.college.module.study.dal.dataobject.timetable.ClassTimetableDO;
import com.nanhai.buddhist.college.framework.common.pojo.PageResult;

import static com.nanhai.buddhist.college.framework.common.util.collection.CollectionUtils.convertList;
import static com.nanhai.buddhist.college.framework.common.util.collection.CollectionUtils.convertMap;
import static com.nanhai.buddhist.college.framework.common.util.collection.CollectionUtils.convertSet;

/**
 * 课程 Service 接口
 *
 * @author xqenzo@163.com
 */
public interface ClassTimetableService {

    /**
     * 创建课程
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClassTimetable(@Valid ClassTimetableCreateReqVO createReqVO);

    /**
     * 更新课程
     *
     * @param updateReqVO 更新信息
     */
    void updateClassTimetable(@Valid ClassTimetableUpdateReqVO updateReqVO);

    /**
     * 删除课程
     *
     * @param id 编号
     */
    void deleteClassTimetable(ClassTimetableDeleteReqVO deleteReqVO);

    /**
     * 获得课程
     *
     * @param id 编号
     * @return 课程
     */
    ClassTimetableDO getClassTimetable(Long id);

    /**
     * 获得课程列表
     *
     * @param ids 编号
     * @return 课程列表
     */
    List<ClassTimetableDO> getClassTimetableList(Collection<Long> ids);


    List<ClassTimetableDO> getClassTimetableListByClassId(String classId);


    List<ClassTimetableDO> getClassTimetableListByTeacherId(String teacherId);

    /**
     * 获得课程分页
     *
     * @param pageReqVO 分页查询
     * @return 课程分页
     */
    PageResult<ClassTimetableDO> getClassTimetablePage(ClassTimetablePageReqVO pageReqVO);

    /**
     * 获得课程列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 课程列表
     */
    List<ClassTimetableDO> getClassTimetableList(ClassTimetableExportReqVO exportReqVO);

    /**
     * 初始 班级课程表
     * @param classId
     */
    void initClassTimeTableByClassId(String classId);

    /**
     * 封装vo
     * @param list
     * @return
     */
     List<ClassTimetableRespVO> coverNames(List<ClassTimetableDO> list);

    /**
     * 根据星期获取今日课程数据
     * @param reqVO
     * @return
     */
    List<ClassTimetableDO>  getTodaySubjectByDate(ClassTimetableTodayReqVO reqVO);


    /**
     * 教师获取今日课程
     * @param reqVo
     * @return
     */
    List<ClassTimetableDO> getTodayTeacherClassTimetableList(ClassTimetableTeacherTodayVO reqVo);

    /**
     * 获取生成二维码字符
     * @param id
     * @return
     */
    String getQrCodeStr(Long id);




}
